草庐IT

Go语言入门(go环境配置,变量和常量)

te9uila 2023-04-01 原文

go语言特点

  1. 天然支持高并发
  2. 语法简单,去掉很多臃肿的东西
  3. 优化的内存分配和垃圾处理
  4. 完善的标准库

go安装

下载:Go下载 - Go语言中文网 - Golang中文社区 (studygolang.com)

go version判断是否安装成功

配置环境变量GOROOT ,GOPATH

go env查看环境变量配置

goland开发工具安装

Download GoLand: A Go IDE with extended support for JavaScript, TypeScript, and databases (jetbrains.com)

第一个go程序(HelloWorld)

​ 当编译器发现某个包的名字为main时,它一定也会发现名为main()的函数,否则不会创建可执行文件,main()函数是程序的入口,所以,如果没有这个函数,程序就没有办法开始执行。程序编译时,会使用声明main包的代码所在的目录的目录名作为二进制可执行文件的文件名

// 可执行文件必须有main包,一个项目只有一个main
package main

// 导入一个系统包fmt用来输出(format)
import "fmt"

func main() {
	//打印字符串
	fmt.Println("HelloWorld!")
}

控制台执行方法:go run + 文件名

变量 (显示声明变量数据类型,var 关键字,变量名小驼峰)

​ go语言时静态语言类型,因此每次定义变量必须声明其数据类型,定义结束后没有使用会爆错,没有定义初值,会自动定义默认值

1. 整型和浮点型默认0和0.0
1. 字符串变量的默认值为空字符串
1. 布尔型变量默认为false
1. 切片,函数,指针变量默认为nil

单行变量定义 var + 变量名 + 数据类型

package main

import "fmt"

func main() {
    // 定义字符串型变量tmp
	var tmp string = "robot01"
	fmt.Println(tmp)
}

批量定义变量 var ()

package main

import "fmt"

func main() {
	var (
		name    string
		age     int
		factory string
	)
	name = "robot01"
	age = 18
	factory = "factory01"
	fmt.Printf("Name:%s \nAge:%d \nFactory: %s \n", name, age, factory)
}

短变量声明以及初始化 变量名 := 值

​ 编译器可以根据右值的数据类型,自动推导变量的数据类型,左值的变量名,不得与其他变量名相同

package main

import "fmt"

func main() {
	name := "robot01"
	age := 18
	factory := "factory01"
	fmt.Printf("Name:%s \nAge:%d \nFactory: %s \n", name, age, factory)
}

变量交换

package main

import "fmt"

func main() {
	tmpA := 100
	tmpB := 200
    // tmpA 与 tmpB进程值交换,不需要使用中间键
	tmpA, tmpB = tmpB, tmpA
	fmt.Printf("tmpA = %d \ntmpB = %d", tmpA, tmpB)
}

匿名变量

​ 匿名变量的特点是一个下划线 "_" ,下划线本身就是一个特殊的标识符,被称为空白标识符,它可以像其他标识符一样用于变量的声明或者赋值(任何类型都可以赋值给它),但任何赋值给这个标识符的值都将被抛弃,因此这些值不能在后续的代码中使用,也不可以使用这个标识符作为变量对其他变量进行赋值或运算。使用匿名变量时,只需要在变量声明的地方使用下划线替换即可

package main

import "fmt"

func test() (int, int) {
	return 100, 200
}

func main() {
    // test()函数固定返回两个返回值,但是只需要第一个返回值,因此使用匿名变量来抛弃掉第二个返回值
    // 使代码更加的灵活
	tmpA, _ := test()
	fmt.Printf("tmpA = %d", tmpA)
}

​ 匿名变量不占用内存空间,不会分配内存。匿名变量与匿名变量之间也不会因为多次声明而无法使用

变量的作用域

局部变量(在函数内部定义的变量)& 全局变量(在函数外部定义的变量)

⭐局部变量和全局变量可以使用同样的名字,使用时依据就近原则

⭐全局变量必须使用var关键字定义,(:=)不能定义全部变量

import "fmt"

var tmpA int = 100

func test() {
	fmt.Printf("test() => tmpA = %d \n", tmpA)
}
func main() {
	tmpA := 200
	fmt.Printf("main() => tmpA = %d \n", tmpA)
	test()
}
// 输出:
// main() => tmpA = 200
// test() => tmpA = 100

常量(const)(简单值的标识符,不可以被修改)

package main

import "fmt"

func main() {
	// 显式定义常量
	const URL1 string = "www.baidu.com"
	// 隐式定义常量
	const URL2 = "www.tequila.com"
	// 批量定义常量
	const ROBOTNAME, ROBOTAGE = "robot-01", 18
	fmt.Printf("URL1: %s\nURL2: %s\nROBOTNAME: %s\nROBOTAGE: %d\n", URL1, URL2, ROBOTNAME, ROBOTAGE)
}

iota 常量

​ iota,可以被认为是一个可以被编辑器修改的常量,是go语言里的常量计数器,iota在const关键字出现时将被重置为0,const 中每新增一行常量声明将使iota计数一次

package main

import "fmt"

func main() {
	const (
		tmpA = iota
		tmpB = iota
		tmpC
		tmpD
		tmpE = "String"
		tmpF = iota
		tmpG
	)
	fmt.Println(tmpA, tmpB, tmpC, tmpD, tmpE, tmpF, tmpG)
}

有关Go语言入门(go环境配置,变量和常量)的更多相关文章

  1. ruby - 如何将脚本文件的末尾读取为数据文件(Perl 或任何其他语言) - 2

    我正在寻找执行以下操作的正确语法(在Perl、Shell或Ruby中):#variabletoaccessthedatalinesappendedasafileEND_OF_SCRIPT_MARKERrawdatastartshereanditcontinues. 最佳答案 Perl用__DATA__做这个:#!/usr/bin/perlusestrict;usewarnings;while(){print;}__DATA__Texttoprintgoeshere 关于ruby-如何将脚

  2. ruby-on-rails - 未初始化的常量 Psych::Syck (NameError) - 2

    在我的gem中,我需要yaml并且在我的本地计算机上运行良好。但是在将我的gem推送到ruby​​gems.org之后,当我尝试使用我的gem时,我收到一条错误消息=>"uninitializedconstantPsych::Syck(NameError)"谁能帮我解决这个问题?附言RubyVersion=>ruby1.9.2,GemVersion=>1.6.2,Bundlerversion=>1.0.15 最佳答案 经过几个小时的研究,我发现=>“YAML使用未维护的Syck库,而Psych使用现代的LibYAML”因此,为了解决

  3. ruby-on-rails - 如何使用 instance_variable_set 正确设置实例变量? - 2

    我正在查看instance_variable_set的文档并看到给出的示例代码是这样做的:obj.instance_variable_set(:@instnc_var,"valuefortheinstancevariable")然后允许您在类的任何实例方法中以@instnc_var的形式访问该变量。我想知道为什么在@instnc_var之前需要一个冒号:。冒号有什么作用? 最佳答案 我的第一直觉是告诉你不要使用instance_variable_set除非你真的知道你用它做什么。它本质上是一种元编程工具或绕过实例变量可见性的黑客攻击

  4. ruby - 通过 ruby​​ 进程共享变量 - 2

    我正在编写一个gem,我必须在其中fork两个启动两个webrick服务器的进程。我想通过基类的类方法启动这个服务器,因为应该只有这两个服务器在运行,而不是多个。在运行时,我想调用这两个服务器上的一些方法来更改变量。我的问题是,我无法通过基类的类方法访问fork的实例变量。此外,我不能在我的基类中使用线程,因为在幕后我正在使用另一个不是线程安全的库。所以我必须将每个服务器派生到它自己的进程。我用类变量试过了,比如@@server。但是当我试图通过基类访问这个变量时,它是nil。我读到在Ruby中不可能在分支之间共享类变量,对吗?那么,还有其他解决办法吗?我考虑过使用单例,但我不确定这是

  5. ruby-on-rails - active_admin 目录中的常量警告重新声明 - 2

    我正在使用active_admin,我在Rails3应用程序的应用程序中有一个目录管理,其中包含模型和页面的声明。时不时地我也有一个类,当那个类有一个常量时,就像这样:classFooBAR="bar"end然后,我在每个必须在我的Rails应用程序中重新加载一些代码的请求中收到此警告:/Users/pupeno/helloworld/app/admin/billing.rb:12:warning:alreadyinitializedconstantBAR知道发生了什么以及如何避免这些警告吗? 最佳答案 在纯Ruby中:classA

  6. ruby-on-rails - 独立 ruby​​ 脚本的配置文件 - 2

    我有一个在Linux服务器上运行的ruby​​脚本。它不使用rails或任何东西。它基本上是一个命令行ruby​​脚本,可以像这样传递参数:./ruby_script.rbarg1arg2如何将参数抽象到配置文件(例如yaml文件或其他文件)中?您能否举例说明如何做到这一点?提前谢谢你。 最佳答案 首先,您可以运行一个写入YAML配置文件的独立脚本:require"yaml"File.write("path_to_yaml_file",[arg1,arg2].to_yaml)然后,在您的应用中阅读它:require"yaml"arg

  7. ruby-on-rails - 如何在我的 Rails 应用程序 View 中打印 ruby​​ 变量的内容? - 2

    我是一个Rails初学者,但我想从我的RailsView(html.haml文件)中查看Ruby变量的内容。我试图在ruby​​中打印出变量(认为它会在终端中出现),但没有得到任何结果。有什么建议吗?我知道Rails调试器,但更喜欢使用inspect来打印我的变量。 最佳答案 您可以在View中使用puts方法将信息输出到服务器控制台。您应该能够在View中的任何位置使用Haml执行以下操作:-puts@my_variable.inspect 关于ruby-on-rails-如何在我的R

  8. ruby - RuntimeError(自动加载常量 Apps 多线程时检测到循环依赖 - 2

    我收到这个错误:RuntimeError(自动加载常量Apps时检测到循环依赖当我使用多线程时。下面是我的代码。为什么会这样?我尝试多线程的原因是因为我正在编写一个HTML抓取应用程序。对Nokogiri::HTML(open())的调用是一个同步阻塞调用,需要1秒才能返回,我有100,000多个页面要访问,所以我试图运行多个线程来解决这个问题。有更好的方法吗?classToolsController0)app.website=array.join(',')putsapp.websiteelseapp.website="NONE"endapp.saveapps=Apps.order("

  9. Ruby Sinatra 配置用于生产和开发 - 2

    我已经在Sinatra上创建了应用程序,它代表了一个简单的API。我想在生产和开发上进行部署。我想在部署时选择,是开发还是生产,一些方法的逻辑应该改变,这取决于部署类型。是否有任何想法,如何完成以及解决此问题的一些示例。例子:我有代码get'/api/test'doreturn"Itisdev"end但是在部署到生产环境之后我想在运行/api/test之后看到ItisPROD如何实现? 最佳答案 根据SinatraDocumentation:EnvironmentscanbesetthroughtheRACK_ENVenvironm

  10. ruby-on-rails - ActionController::RoutingError: 未初始化常量 Api::V1::ApiController - 2

    我有用于控制用户任务的Rails5API项目,我有以下错误,但并非总是针对相同的Controller和路由。ActionController::RoutingError:uninitializedconstantApi::V1::ApiController我向您描述了一些我的项目,以更详细地解释错误。应用结构路线scopemodule:'api'donamespace:v1do#=>Loginroutesscopemodule:'login'domatch'login',to:'sessions#login',as:'login',via::postend#=>Teamroutessc

随机推荐