• go 数据类型和操作符


    文件名&关键字&标识符

       1. 所有go源码以 .go结尾

       2. 标识符以字母或者下划线开头,大小写敏感:add, Add, _add

           _是特殊标识符,用来忽略结果

       3. 保留关键字

       

    Go程序基本结构

    package main
    import “fmt”
    func main() {
        fmt.Println(“hello, world”)
    }
    
    //1. 任何一个代码文件隶属于一个包
    //2. import 关键字,引用其他包
    //3. golang可执行程序,package main,并且有且只有一个main入口函数
    //4. 包中函数调用:
            a. 同一个包中函数,直接调用
            b. 不同包中函数,通过 包名.函数名 进行调用
    //5. 包访问控制规则        
            大写意味着这个函数/变量是可导出的
            小写意味着这个函数/变量是私有的,包外部不能访问

    函数声明和注释

    1. 函数声明: func   函数名字 (参数列表) (返回值列表){}
    func add() {}
    func add(a int , b int) int {}
    func add(a int , b int) (int, int) {}
    2. 注释,两种注释,单行注释: // 和多行注释  /* */

    常量和变量

    常量

    1. 常量使用const 修饰,代表永远是只读的,不能修改
    2. const 只能修饰boolean,number(int相关类型、浮点类型、complex)和string
    3. 语法:const identifier [type] = value,其中type可以省略 

    const b string = "hello world"
    const b = "helloworld"
    const a = 10
    const res = getValue()   //错误示例

    const(
    a = 0
    b = 1
    c = 2
    )

    const(
     a = iota
    b //1
    c //2
    )

    变量

    语法:var identifier type

    var (
    a int            //默认为0
    b string      //默认为””
    c bool        //默认为false
    d = 8
    e = “hello world”
    )

    值类型和引用类型

    1 值类型:变量直接存储值,内存通常在栈中分配

        基本数据类型int、float、bool、string以及数组和struct
    2 引用类型:变量存储的是一个地址,这个地址存储最终的值。内存通常在堆上分配。通过GC回收。

     指针、slice、map、chan等都是引用类型

    变量作用域

    在函数内部声明的变量叫做局部变量,生命周期仅限于函数内部
    在函数外部声明的变量叫做全局变量,生命周期作用于整个包,如果是大写的,则作用于整个程序。

    数据类型和操作符

     1 bool类型,只能存true和false
               var a bool

               var a bool = true

               var a = true

     2 相关操作符 ! && ||

     3 数字类型,主要有int、int8、int16、int32、int64、uint8、uint16、uint32、uint64、float32、float64

     4 类型转换,type(variable),比如:var a int=8;  var b int32=int32(a)

    package main
    func main() {
        var a int
        var b int32
        a = 15
        b = a + a // compiler error
    b = int32(a+a) b
    = b + 5 // ok: 5 is a constant }

     5 逻辑操作符: == 、!=、<、<=、>和 >=

      数学操作符:+、-、*、/等等

     6 字符类型:var a byte

    var a byte = 'c'

    7 字符串类型: var str string

    8 字符串表示两种方式: 1)双引号 2)`` (反引号)

    var str2 = `hello 
     
     
    
    this is a test string
    This is a test string too·`
    1 #string到int  
    2 int,err:=strconv.Atoi(string)  
    3 #string到int64  
    4 int64, err := strconv.ParseInt(string, 10, 64)  
    5 #int到string  
    6 string:=strconv.Itoa(int)  
    7 #int64到string  
    8 string:=strconv.FormatInt(int64,10)
    string, int, int64互转

    几个例子

     1 // main
     2 package main
     3 
     4 import (
     5     "fmt"
     6 )
     7 
     8 func is_prime(num int) bool {
     9     if num == 1 {
    10         return false
    11     }
    12     for i := 2; i < num; i++ {
    13         if num%i == 0 {
    14             return false
    15         }
    16     }
    17     return true
    18 }
    19 
    20 func main() {
    21 
    22     var count int
    23     for i := 100; i <= 200; i++ {
    24         if is_prime(i) {
    25             count++
    26             fmt.Println(i)
    27         }
    28     }
    29     fmt.Println("totally prime number: ", count)
    30 }
    100-200间的素数
     1 // main
     2 package main
     3 
     4 import (
     5     "fmt"
     6     "strconv"
     7 )
     8 
     9 func is_narcissistic(num int) bool {
    10     num_str := strconv.Itoa(num)
    11     length := len(num_str)
    12     var sum int
    13     for i := 0; i < length; i++ {
    14         tmp, _ := strconv.Atoi(num_str[i : i+1])
    15         //fmt.Println(tmp)
    16         sum += tmp * tmp * tmp
    17 
    18     }
    19 
    20     if sum == num {
    21         return true
    22     }
    23     return false
    24 }
    25 
    26 func main() {
    27     var count int
    28     for i := 100; i < 1000; i++ {
    29         if is_narcissistic(i) {
    30             count++
    31             fmt.Println(i)
    32         }
    33     }
    34     fmt.Println("total number: ", count)
    35 }
    100-999种所有的水仙花数
     1 // main
     2 package main
     3 
     4 import (
     5     "fmt"
     6 )
     7 
     8 func factorial(num int) int {
     9     var result = 1
    10     for i := 1; i <= num; i++ {
    11         result *= i
    12     }
    13     return result
    14 }
    15 
    16 func factorial_sum(num int) int {
    17     var sum int
    18     for i := 1; i <= num; i++ {
    19         sum += factorial(i)
    20     }
    21     return sum
    22 }
    23 
    24 func main() {
    25     res := factorial_sum(3)
    26     fmt.Println(res)
    27 }
    n的阶乘之和

    8.1   strings和strconv使用

    strings.HasPrefix(s string, prefix string) bool:判断字符串s是否以prefix开头 。
    strings.HasSuffix(s string, suffix string) bool:判断字符串s是否以suffix结尾

    // main
    package main
    
    import (
        "fmt"
        "strings"
    )
    
    func urlProcess(url string) string {
        result := strings.HasPrefix(url, "http://")
        if !result {
            url = fmt.Sprintf("http://%s", url)
        }
        return url
    }
    
    func pathProcess(path string) string {
        result := strings.HasSuffix(path, "/")
        if !result {
            path = fmt.Sprintf("%s/", path)
        }
        return path
    }
    
    func main() {
        var (
            url  string
            path string
        )
        fmt.Scanf("%s%s", &url, &path)
    
        fmt.Println(urlProcess(url))
        fmt.Println(pathProcess(path))
    }
    判断前缀后缀

    strings.Index(s string, str string) int:判断str在s中首次出现的位置,如果没有出现,则返回-1
    strings.LastIndex(s string, str string) int:判断str在s中最后出现的位置,如果没有出现,则返回-1

    strings.Replace(str string, old string, new string, n int):字符串替换
    strings.Count(str string, substr string)int:字符串计数
    strings.Repeat(str string, count int)string:重复count次str
    strings.ToLower(str string)string:转为小
    strings.ToUpper(str string)string:转为大写

    strings.TrimSpace(str string):去掉字符串首尾空白字符
    strings.Trim(str string, cut string):去掉字符串首尾cut字符
    strings.TrimLeft(str string, cut string):去掉字符串首cut字符
    strings.TrimRight(str string, cut string):去掉字符串首cut字符
    strings.Field(str string):返回str空格分隔的所有子串的slice
    strings.Split(str string, split string):返回str split分隔的所有子串的slice

    strings.Join(s1 []string, sep string):用sep把s1中的所有元素链接起来
    strings.Itoa(i int):把一个整数i转成字符串
    strings.Atoi(str string)(int, error):把一个字符串转成整数

    9 时间 和日期类型

    9.1. time包
    9.2. time.Time类型,用来表示时间
    9.3. 获取当前时间, now := time.Now()
    9.4. time.Now().Day(),time.Now().Minute(),time.Now().Month(),time.Now().Year()
    9.5. 格式化,fmt.Printf(“%02d/%02d%02d %02d:%02d:%02d”, now.Year()…)

    9.6 . time.Duration用来表示纳秒

    9.7. 一些常量:
    const (
    Nanosecond Duration = 1
    Microsecond = 1000 * Nanosecond
    Millisecond = 1000 * Microsecond
    Second = 1000 * Millisecond
    Minute = 60 * Second
    Hour = 60 * Minute
    )

    9.8. 格式化:
    now := time.Now()
    fmt.Println(now.Format(“02/1/2006 15:04”))
    fmt.Println(now.Format(“2006/1/02 15:04”))
    fmt.Println(now.Format(“2006/1/02”))

     1 // main
     2 package main
     3 
     4 import (
     5     "fmt"
     6     "time"
     7 )
     8 
     9 func main() {
    10     now := time.Now()
    11     fmt.Println(now.Format("2006/01/02 15:04:00"))
    12 }
    打印当前时间

    10 指针类型

    10.1. 普通类型,变量存的就是值,也叫值类型
    10.2. 获取变量的地址,用&,比如: var a int, 获取a的地址:&a
    10.3. 指针类型,变量存的是一个地址,这个地址存的才是值
    10.4. 获取指针类型所指向的值,使用:*,比如:var *p int, 使用*p获取p指向的值

  • 相关阅读:
    mongodb远程连接配置
    CentOs系统设置python版本
    python非官方模块下载大全
    Series.str——字符串批量处理方法
    gevent-协程用法
    与vnpy相关的有用博客网址
    vnpy官网说明文档网址
    Opencv各种编码器下视频文件大小对比
    Linux下python默认版本切换成替代版本
    CPU拓扑结构
  • 原文地址:https://www.cnblogs.com/cedrelaliu/p/7026615.html
Copyright © 2020-2023  润新知