Go语言学习笔记介绍1变量、类型和常量

介绍

这是来自 Funai Research Institute Digital 的 osw。我决定在工作中使用 Go 语言,所以我要从现在开始学习它。这是备忘录。如果您可以参考,我将不胜感激。

目标听众

  • 正在学习围棋的人
  • 那些已经学习过其他语言基本语法的人

学习环境

学习环境是这样的:下面这篇文章总结了这个环境的搭建备忘录。如果您有兴趣,请参考它。

  • Windows 11 / 主页
  • VS 代码
  • go 版本 go1.19.2 windows/amd64
  • git 版本 2.38.0.windows.1

围棋概述

我将简单介绍一下概述。

  • 编译器风格的静态类型语言
  • 可以交叉编译
    • 通过设置以下环境变量,根据每个环境生成可执行文件
      • GOOS
      • GOARCH
    • 也可以嵌入
  • 很多标准工具
    • 编译、文档生成、静态分析等。
  • 并发变得简单
  • 丰富的库
  • 2009 年开源
    • 2012年发布正式版Go1.0
    • 最新版本 Go1.19.2(截至 2022/10/17)
    • 每六个月更新一次

如果你已经熟悉C/C++/Java等其他语言,可能会有些迷惑。在 Go 中,编译器会自动在语句末尾插入分号,因此似乎没有必要显式编写它。你可能需要习惯像 Go 那样写,比如在 if 语句中省略 (),在 switch 中不写 break。

但是,一旦习惯了,它看起来就很整洁,所以在那之前,都是抄经的。

代码模板

学习的模板。我们将使用它来编写代码。 Go 程序似乎以 main 包的 main 函数作为入口点。

模板

// main関数が所属するファイルはmainパッケージに含ませる必要がある
package main

// fmtパッケージをインポート
import "fmt"

/*
 * エントリポイント
 */
func main() {
    // コードを記述
}

多变的

句法

// 宣言
var 変数 型
var 変数1, 変数2 型

// 初期化
var 変数 型 = 値
var 変数    = 値 // 型推論が働き、型を省略可能
変数       := 値 // := を使った初期化をするとvar, 型を省略可能

// 複数の変数を初期化
var 変数1, 変数2 型 = 値1, 値2
var 変数1, 変数2    = 値1, 値2
変数1, 変数2       := 値1, 値2
// var 変数1, 変数2 型 = 値1 宣言した分だけ値を渡す必要があり、これはコンパイルエラーになる

// 変数をまとめて定義
var (
        変数 型 = 値
        変数    = 値
        変数1, 変数2 型 = 値1, 値2
        変数1, 変数2    = 値1, 値2
        // 変数 := 値 var()の中では := は使えず、コンパイルエラーになる
)

示例代码

package main

import "fmt"

// 関数の外では := は使えず、varを使って定義する必要がある
var gNum = 100
// gStr := "test" コンパイルエラー

func main() {

        // 宣言
        var num1 int
        num1 = 0

        // 初期化
        var num2 int = 1
        var num3     = 2
        num4        := 3

        // 複数の変数を初期化
        var str1, str2 string = "aaa", "bbb"
        var str3, str4        = "ccc", "ddd"
        str5, str6           := "eee", "fff"

        // 変数をまとめて定義
        var (
                num5 int    = 10
                num6        = 11
                str7 string = "uuu"
                str8        = "vvv"
                str9, str10  string = "www", "xxx"
                str11, str12        = "yyy", "zzz"
                // str13 := "test" var()の中では := は使えず、コンパイルエラーになる
        )

        fmt.Printf("宣言
")
        fmt.Printf("num1: %d

", num1)

        fmt.Printf("初期化
")
        fmt.Printf("num2: %d
", num2)
        fmt.Printf("num3: %d
", num3)
        fmt.Printf("num4: %d

", num4)

        fmt.Printf("複数の変数を初期化
")
        fmt.Printf("str1, str2: %s, %s
", str1, str2)
        fmt.Printf("str3, str4: %s, %s

", str3, str4)

        fmt.Printf("変数をまとめて定義
")
        fmt.Printf("num5: %d
", num5)
        fmt.Printf("num6: %d
", num6)
        fmt.Printf("str5: %s
", str5)
        fmt.Printf("str6: %s
", str6)
        fmt.Printf("str7,  str8 : %s, %s
", str7, str8)
        fmt.Printf("str9,  str10: %s, %s
", str9, str10)
        fmt.Printf("str11, str12: %s, %s
", str11, str12)
}

执行结果

宣言
num1: 0

初期化
num2: 1
num3: 2
num4: 3

複数の変数を初期化
str1, str2: aaa, bbb
str3, str4: ccc, ddd

変数をまとめて定義
num5: 10
num6: 11
str5: eee
str6: fff
str7,  str8 : uuu, vvv
str9,  str10: www, xxx
str11, str12: yyy, zzz

零值

如果只是声明一个变量而不初始化它,似乎会根据类型自动输入一个零值。

类型零值
数值类型(int、float 等)0
布尔类型错误的
字符串类型""(空字符串)

输出到屏幕

这次使用 fmt.Printf() 进行输出,不过好像可以通过导入 fmt 包来使用各种 PrintX()。

Print() 和 Println() 指定变量用“,”隔开,所以我个人觉得有点不适应。我使用它是因为可以像 C 一样使用的 Printf 非常适合。下一篇文章总结了各个库之间的区别,有兴趣的可以参考一下。

函数名的第一个字符

函数名的第一个字母似乎表示链接,似乎分别表示对外部包的公共/私有。这意味着如果您尝试使用 fmt.Println() 来尝试 fmt.println(),则会发生错误。

第一个字符意义
大写字母发布到外部包
小写专用于外部包

示例代码

package main

// importも()でまとめる事ができる。","で区切る必要はない
import (
        "fmt"
)

func main() {
        // fmt.println("test") コンパイルエラー: undefined: fmt.printlnとなる
        fmt.Println("test")
}

类型

整数类型

类型少量符号最小值最大值
整数88-128127
整数1616-3276832767
int32 / 符文32-21474836482147483647
整数6464-92233720368547758089223372036854775807
uint8/字节8没有任何0255
uint1616没有任何065535
uint3232没有任何04294967295
赢t6464没有任何018446744073709551615

浮点型

类型少量
浮动3232
浮动6464

字符串类型

类型
细绳

布尔类型

类型
布尔

复数类型

类型
复杂64
复杂128

环境依赖

似乎建议对 int 使用整数,除非有特殊原因,例如指定大小或指定无符号。

类型位(32 位操作系统)位(64 位操作系统)
整数3264
单位3264
uintptr3264

类型转换

如果你不在 Go 中进行显式类型转换,你会得到一个编译错误。

句法

// 値v, 型Tのとき
var 変数 T = T(v)

// シンプルに書くと
変数 := T(v)

示例代码

package main

import "fmt"

func main() {
        f := 5.1
        var i int = f
        fmt.Println(i)
}

我认为 float -> int 会截断小数并存储一个整数,但我得到了一个编译错误。

执行结果

.hello.go:7:14: cannot use f (variable of type float64) as type int in variable declaration

持续的

使用const 定义一个常量。只能使用字符、字符串、布尔值和数值,不能用:=初始化。

关于命名,似乎用 Pascal 大小写是很常见的。但是,这样做时,请注意链接,并记住如果第一个字母大写,则表示它将发布到外部包。

句法

const World = "World"
const Truth = true
const Tax   = 0.1

// ()でまとめることもできる
const (
    World = "World"
    Truth = true
    Tax   = 0.1    
)

示例代码

package main

import "fmt"

const (
        World = "World"
        Truth = true
        Tax   = 0.1
)

func main() {
        fmt.Println(World)
        fmt.Println(Truth)
        fmt.Println(Tax)
}

执行结果

World
true
0.1

综上所述

目前为止就这样了。

原创声明:本文系作者授权爱码网发表,未经许可,不得转载;

原文地址:https://www.likecs.com/show-308629959.html