아래는 개인적인 의견이며, 실제 다수의 개발 환경과는 차이가 있을 수 있습니다.

Python

  • 사용범위: 데이터 과학, 웹 개발, 인공지능, 자동화 스크립트
  • 특징: 초보자에게 친숙하고 다양한 라이브러리를 제공
  • 선정 이유: AI와 빅데이터 분야의 성장으로 인해 지속적으로 수요가 증가

파이썬은 함수형 프로그래밍부터 객체 지향 프로그래밍까지 다양한 스타일을 수용하는 다목적 프로그래밍 언어로 주목받고 있습니다YouTube, Google 검색, iRobot 머신과 같은 유명한 플랫폼은 Python의 견고함 덕분에 존재할 수 있었습니다

HackerRank의 데이터에 따르면 Python은 미주 지역 채용 관리자가 두 번째로 많이 찾는 언어입니다사용자 친화적인 특성 덕분에 초보자와 숙련된 개발자 모두에게 인기가 높습니다

Python의 풍부한 라이브러리는 미리 빌드된 명령어로 작업을 간소화하며, 대화형 특성은 실시간 코드 테스트에 도움이 됩니다채용 관리자의 50% 이상이 파이썬 기술을 우선시하는 등 광범위한 수요를 고려할 때, 파이썬은 프로그래밍 환경의 주요 자산으로 남아 있습니다.

JavaScript

  • 사용범위: 웹 프론트엔드, 백엔드(Node.js), 모바일 애플리케이션(React Native)
  • 특징: 웹 표준 기술로서의 지위와 비동기 처리에 강점
  • 선정 이유: 웹 개발의 필수 언어로서의 지속적인 인기

스택 오버플로의 2020년 개발자 설문조사에 따르면 자바스크립트는 전 세계에서 가장 많이 사용되는 언어로 69.7%로 1위를 차지했습니다이러한 우위는 미주 지역의 채용 관리자들 사이에서 자바스크립트에 대한 높은 수요를 통해 더욱 두드러집니다

자바스크립트는 개발자가 애니메이션 그래픽, 인터랙티브 맵 등과 같은 동적 요소를 제작할 수 있도록 웹 페이지의 상호작용성을 향상시키는 데 중추적인 역할을 합니다HTML 및 CSS와 결합된 자바스크립트는 향상된 웹사이트 제어 기능을 제공하여 뛰어난 사용자 탐색 및 가독성을 보장합니다자바스크립트가 널리 사용되는 이유는 대부분의 웹 브라우저와 통합되고 초보자도 쉽게 사용할 수 있기 때문입니다방대한 온라인 커뮤니티와 광범위한 지원 리소스는 자바스크립트의 최상위 프로그래밍 언어로서의 입지를 더욱 공고히 해줍니다.

Java

  • 사용범위: 엔터프라이즈급 백엔드 시스템, 안드로이드 앱 개발

  • 특징: 강력한 크로스 플랫폼 지원과 안정적인 성능

  • 선정 이유: 대규모 시스템 개발과 안드로이드 시장의 확대

    Java는 어디서나 한 번만 작성하면 실행할 수 있다는 철학으로 엔터프라이즈급 애플리케이션과 안드로이드 앱 개발에서 확고한 입지를 다지고 있습니다강력한 커뮤니티 지원과 이식성 덕분에 지속적인 인기를 누리고 있습니다

C#

  • 사용범위: 윈도우 애플리케이션, 게임 개발(Unity), 웹 개발(ASP.NET)

  • 특징: 강력한 개발 환경과 통합된 개발 경험

  • 선정 이유: 게임 개발과 .NET 생태계의 확장

    C++는 시스템 프로그래밍, 게임 개발, 고성능 애플리케이션의 초석이 되고 있습니다높은 수준의 추상화를 통해 낮은 수준의 조작이 가능하므로 성능이 중요한 작업에 적합합니다

    TypeScript

  • 사용범위: 대규모 웹 애플리케이션 개발

  • 특징: JavaScript의 상위 집합으로 타입 안정성 제공

  • 선정 이유: JavaScript의 복잡성 관리와 안정적인 개발을 위한 수요 증가

    자바스크립트의 상위 집합인 타입스크립트는 정적 타이핑을 추가하여 대규모 애플리케이션에 선호되는 선택지입니다기존 JavaScript 코드베이스와의 호환성 및 향상된 개발자 경험으로 인해 그 중요성이 날로 높아지고 있습니다

Swift

  • 사용범위: iOS 및 macOS 애플리케이션 개발

  • 특징: Apple 플랫폼에 최적화된 성능과 간결한 문법

  • 선정 이유: Apple 생태계 내 앱 개발의 필수 언어

    Apple의 프로그래밍 언어인 Swift는 iOS 및 macOS 앱 개발에 필수적인 언어입니다구문이 간결하고 표현력이 뛰어나 개발자들이 원활하고 직관적인 사용자 환경을 만들기 위해 선호하는 언어입니다

Kotlin

  • 사용범위: 안드로이드 앱 개발, 서버 사이드 애플리케이션

  • 특징: 간결하고 표현력 있는 문법, 자바와의 상호 운용성

  • 선정 이유: 안드로이드 공식 개발 언어로의 지정과 개발자 커뮤니티의 성장

    Google이 Android 개발을 위해 승인한 Kotlin은 간결함과 Java와의 상호 운용성으로 인기를 얻고 있습니다Kotlin을 배우면 효율적이고 현대적인 Android 애플리케이션을 만들 수 있는 길이 열립니다

Go (Golang)

  • 사용범위: 시스템 프로그래밍, 분산 시스템, 클라우드 서비스
  • 특징: 간결한 문법과 빠른 실행 속도, 병행성(concurrency) 지원
  • 선정 이유: 클라우드 기반 서비스와 마이크로서비스 아키텍처의 인기

Rust

  • 사용범위: 시스템 프로그래밍, 웹 어셈블리, 임베디드 시스템
  • 특징: 메모리 안전성과 병행성을 보장하는 현대적인 시스템 언어
  • 선정 이유: 안전한 시스템 개발에 대한 수요 증가

Rust는 스택 오버플로와 같은 플랫폼에서 꾸준히 호평을 받고 있으며, 종종 가장 선호도가 높은 상위 프로그래밍 언어 중 하나로 꼽히기도 합니다사용자의 86%에 달하는 상당수가 Rust에 대한 전문성을 강화하는 데 큰 관심을 표명하고 있습니다그러나 이러한 매력에도 불구하고 설문조사에 참여한 개발자 중 단 3%만이 Rust를 사용한다고 답해, 광범위한 프로그래밍 커뮤니티에서 틈새 시장으로 인식되고 있음을 알 수 있습니다

Rust는 구문은 C++와 비슷하지만 응용 가능성이 더 넓은 '다중 패러다임' 언어로 구분됩니다신속한 컴파일, 향상된 크로스 플랫폼 기능 또는 더 밝은 커리어의 길을 우선시하든, Rust를 채택하는 것은 전략적인 선택이 될 수 있습니다.

SQL

  • 데이터베이스 관리
    • 영업 보고서
    • 비즈니스 관리

일반적으로 구조화된 쿼리 언어로 알려진 SQL은 프로그래머가 데이터베이스와 상호 작용할 수 있는 특수 도구로 사용됩니다특히 관계형 데이터베이스 관리 시스템(RDBMS)에 맞게 설계된 SQL은 데이터 검색, 레코드 업데이트, 추가 및 삭제와 같은 작업에 탁월합니다

SQL의 기능은 칭찬할 만하지만, SQL은 소규모 데이터베이스에서 가장 효율적이며 더 크고 복잡한 데이터베이스에서는 한계에 직면할 수 있다는 점에 유의할 필요가 있습니다그럼에도 불구하고 SQL은 프로그래밍 분야에서 세 번째로 많이 사용되는 언어이며, 개발자의 54.7%가 SQL의 기능을 활용하고 있을 정도로 널리 사용되고 있다는 사실은 부인할 수 없습니다.

NOSQL

  • 데이터베이스 관리
  • 영업 보고서
  • 비즈니스 관리

비관계형 SQL의 약자인 NoSQL은 사용자 친화적인 특성을 유지하면서 SQL의 확장성을 향상시키는 것을 목표로 하는 솔루션으로 등장했습니다SQL은 조작과 검색을 위해 데이터를 테이블로 구성하는 관계형 데이터베이스 시스템에 의존하지만, NoSQL은 이러한 테이블 구조를 따르지 않는다는 점에서 차별화됩니다

이러한 유연성 덕분에 NoSQL은 계층적 네트워크 데이터 저장이나 광범위한 클라우드 기반 애플리케이션 지원과 같은 작업에 특히 능숙합니다이러한 적응성을 고려할 때 SQL과 NoSQL은 모두 가장 인기 있는 프로그래밍 언어 중 하나입니다.

반응형

'개발' 카테고리의 다른 글

코딩 AI 랭킹  (0) 2024.03.09
Mac이 AI PC로서 최고인 이유  (0) 2024.02.03
gitlab 설치(apache --proxy--> gitlab)  (0) 2023.12.27
elixir vs rust 비교  (1) 2023.12.27
vscode dev containers  (1) 2023.12.22

Go 1.14 Release

Introduce

최신 1.14버전 릴리즈 됐습니다. Go 1.13 이후 6개월만 입니다. 대부분의 변경사항은 toolchian, runtime, libraries의 도구들입니다. 항상 그랬덧이 거의 모든 파일들이 컴파일 되고 실행될 것입니다.

Go 1 사양으로 작성된 프로그램은 해당 사양의 수명 기간 동안 변경없이 올바르게 컴파일 및 실행됩니다. 무한정의 시점에서 Go 2
스펙이 발생할 수 있지만, 그 때까지 Go 1의 향후 "포인트"릴리스 (Go 1.1, Go 1.2 등)가 발생하더라도 현재
작동하는 Go 프로그램이 계속 작동해야합니다.

go command에서 모듈지원 명령어를 production에서 사용할 수 있고, 종속성을 관리하기 위한 go 모듈로 이전(Migration)하는 것이 좋습니다. 만약 go toolchian 에서 이전작업에 문제가 있다면 알려 이슈들 알려주시기 바랍니다.

언어의 변화

인터페이스 overlapping의 제안에 따라, Go 1.14 는 이제 중복되는 메서드 집합이 있는 인터페이스를 포함할 수 있습니다. 내장된 인터페이스의 메서드는 이미 있는 메서드와 동일한 이름과 동일한 서명을 가질 수 있습니다. 이렇게 하면 일반적으로 다이아몬드 모양의 내장 그래프(imbedding graphs)에서 발생하는 문제를 해결할 수 있습니다. 인터페이스에서 명시적으로 선언된 방법은 이전처럼 고유해야 합니다.

Ports

Darwin

Go1.14는 MacOS10.11 ElCapitan에서 실행되는 마지막 릴리스입니다. GO1.15는 macOS10.12 Sierra이상이 필요합니다.

Go1.14는 MacOS에서 32비트 바이너리를 지원하는 마지막 Go릴리즈입니다(darwin/386MacOS10.15(Catalina)부터 MacOS에서 더 이상 지원되지 않습니다. Go는 64비트를 계속 지원합니다.darwin/amd64

Go1.14는 iOS, iPadOS, watch2S및 tvOS(의 32비트 바이너리를 지원하는 마지막 Go릴리즈가 될 것입니다.darwin/armport. Go는 계속해서 64비트를 지원합니다.darwin/arm64port

Window

Windows의 Go바이너리는 이제 DEP(데이터 실행 방지)를 사용하도록 설정되었습니다.

WebAssembly

js.Value 객체를 통해 Go에서 참조 된 JavaScript 값을 가비지 수집 할 수 있습니다.

js.Value값은 더 이상 == 연산자를 사용해서 비교할 수 없으며, 대신에 equai 메서드를 통해서 배교해야 합니다.

js.ValueIsUndefined,IsNull그리고.IsNaN와 같은 메서드를 가지고 있습니다.

RISC-V

Go1.14에는 Linux에서 64비트 RISC-V에 대한 실험적 지원 포함(GOOS=linux,GOARCH=riscv64)성능, 조립 구문 안정성 및 정확성은 현재 진행 중인 작업이라는 점에 유의하십시오.

FreeBSD

Go는 이제 FreeBSD12.0 이상에서 64비트 ARM아키텍처를 지원합니다(freebsd/arm64)

Native Client (NaCl)

Go1.13 릴리스 노트에 명시된 바와 같이 Go1.14는 NativeClient플랫폼(GOOS=nacl).

Illumos

런타임은 이제 runtime.NumCPU 및 기본값 GOMAXPROCS에 대한 영역 CPU 캡 (zone.cpu-cap 자원 제어)을 참조합니다.

Tools

Go command

vendoring

기본 모듈에 최상위 vendor 디렉토리가 있고 go.mod 파일이 go 1.14 이상을 지정하면 go command의 기본값은 -mod=vendor로 설정되어 해당 플래그를 수행합니다. 새로운 플레그 -mod=mod는 go command이 대신 vendor 디렉토리가 없는 경우, 같이 모듈 캐시에서 모듈을 로드합니다.

-mod=vendor를 설정하면 (명시 적으로 또는 기본적으로) go command는 기본 모듈의 vendor / modules.txt 파일이 go.mod 파일과 일치하는지 확인합니다.

go list -m은 더 이상 vendor디렉토리에 패키지를 제공하지 않는 전이 종속성을 자동으로 생략하지 않습니다. -mod=vendor가 설정되고 vendor/modules.txt에 언급되지 않은 모듈에 대한 정보가 요청되면 명시적으로 실패합니다.

Flags

go get 명령은 더 이상 -mod 플래그를 허용하지 않습니다. 이전에는 플래그 설정이 무시되었거나 빌드가 실패했습니다.

go.mod 파일이 읽기 전용이고 최상위 vendor 디렉토리가없는 경우 -mod=readonly가 기본적으로 설정됩니다.

-modcacherw는 새로 작성된 플래그가 모듈 캐시에 새로 작성된 디렉토리를 읽기 전용으로 만드는 대신 기본 권한으로 유지하도록 지시하는 새로운 플래그입니다. 이 플래그를 사용하면 테스트나 다른 도구가 실수로 모듈의 확인 된 체크섬에 포함되지 않은 파일을 추가 할 가능성이 높아집니다. 그러나 go clean -modcache 대신 rm -rf를 사용하여 모듈 캐시를 제거 할 수 있습니다.

-modfile=file은 go command이 모듈 루트 디렉토리에있는 파일 대신 go.mod 파일을 읽고 쓸 수 있도록 지시하는 새로운 플래그입니다. 모듈 루트 디렉토리를 판별하려면 go.mod라는 파일이 여전히 있어야하지만 액세스 할 수는 없습니다. -modfile이 지정되면 대체 go.sum 파일도 사용됩니다. 경로는 .mod 확장자를 자르고 .sum을 추가하여 -modfile 플래그에서 파생됩니다.

환경변수(Environment variables)

GOINSECURE는 특정 모듈을 원래에서 직접 가져올 때 go command이 HTTPS 연결을 요구하지 않고 인증서 유효성 검사를 건너 뛰도록 지시하는 새로운 환경 변수입니다. 기존 GOPRIVATE 변수와 마찬가지로 GOINSECURE의 값은 쉼표로 구분 된 glob 패턴 목록입니다.

모듈 외부 명령(Commands outside modules)

GO111MODULE=on을 설정하여 모듈 인식 모드를 명시 적으로 활성화하면 go.mod 파일이 없을 때 대부분의 모듈 명령의 기능이 더 제한됩니다. 예를 들어, go build, go run 및 기타 빌드 명령은 표준 라이브러리에서 패키지를 빌드하고, 명령행에서 .go 파일로 지정된 패키지만 빌드 할 수 있습니다.

이전에는 go command으로 각 패키지 경로를 최신 버전의 모듈로 확인했지만, 모듈 경로 나 버전은 기록하지 않았습니다. 이로 인해 느리고 생산성이 떨어지는 빌드가 발생했습니다.

호환되지 않는 버전(+incompatible versions)

최신 버전의 모듈에 go.mod 파일이 포함되어 있으면 해당 버전을 명시적으로 요청하거나 이미 요구하지 않는 한 go get은 해당 모듈의 호환되지 않는 major version으로 더 이상 업그레이드되지 않습니다.
go list는 버전 제어에서 직접 patch할 때, 해당 모듈에 대해 호환되지 않는 major version을 생략하지만, proxy에서 보고하는 경우 포함 할 수 있습니다.

go.mod 파일 유지 관리(maintenance)

go mod tidy 이외의 go command는 더 이상 주 모듈의 다른 (전이) 종속성에 의해 암시 된 간접 종속성 버전을 지정하는 require 지시문을 더 이상 제거하지 않습니다.

변경 사항이 외형적일 경우 go mod tidy 이외의 go command는 더 이상 go.mod 파일을 수정하지 않습니다.

-mod=readonly가 설정되면 go command이 없거나 오류로 인한 go command가 더 이상 실패하지 않습니다.

모듈 다운로드(Module downloading)

go command는 이제 모듈 모드에서 Subversion 저장소를 지원합니다.

go command에는 이제 모듈 프록시 및 기타 HTTP 서버의 일반 텍스트 오류 메시지 스니펫(snippets)이 포함됩니다. 오류 메시지는 유효한 UTF-8이고, 그래픽 문자와 공백으로만 구성된 경우에만 표시됩니다.

Testing

go test -v는 이제 모든 테스트의 끝이 아닌 t.Log 출력을 스트리밍합니다.

Runtime

이 릴리스에서는 지연된 함수를 직접 호출하는 것과 비교하여 대부분의 지연 사용성능에서 오버헤드가 거의 발생하지 않습니다. 결과적으로 이제 지연은 성능에 중요한 코드에서 오버헤드 걱정없이 사용될 수 있습니다.

go routine은 이제 비동기적으로 선점(preemption) 할 수 있습니다. 결과적으로 함수 호출이 없는 루프는 더 이상 스케줄러를 교착 상태로 만들거나 가비지 콜렉션을 크게 지연시키지 않습니다. 이는 windows / arm, darwin / arm, js / wasm 및 plan9 / *를 제외한 모든 플랫폼에서 지원됩니다.

선점(preemption) 구현의 결과로 Linux 및 macOS 시스템을 포함한 Unix 시스템에서 Go 1.14로 빌드 된 프로그램은 이전 릴리스로 빌드 된 프로그램보다 더 많은 신호를 수신하게됩니다. 즉, syscall 또는 golang.org/x/sys/unix와 같은 패키지를 사용하는 프로그램은 EINTR 오류와 함께 더 느린 시스템 호출이 실패함을 의미합니다. 이러한 프로그램은 이러한 방식으로 이러한 오류를 처리해야 하며, 시스템 호출을 다시 시도하기 위해 반복 될 가능성이 높습니다. 이에 대한 자세한 정보는 Linux 시스템의 man 7 signal 또는 다른 시스템의 유사한 문서를 참조하십시오.

페이지 할당자는보다 효율적이며 높은 값의 GOMAXPROCS에서 Lock경합(lock contention)이 크게 줄어 듭니다. 이는 병렬로 빠른 속도로 대규모 할당을 수행 할 때, 대기 시간이 짧고 처리량이 높을 때 가장 두드러집니다.

시간에 의해 사용되는 내부 타이머 time.After,
time.Tick,
net.Conn.SetDeadline 및 친구들은 Lock경합이 적고 컨텍스트 스위치가 적어 더 효율적입니다. 이는 사용자가 눈에 띄게 변경하지 않아야 야기할 수 있는 성능향상입니다.

Core library

새로운 바이트 시퀀스 해싱 패키지

Go 1.14에는 바이트 시퀀스에서 해시 함수를 제공하는 새로운 패키지 hash/maphash가 포함되어 있습니다. 이러한 해시 함수는 임의의 문자열 또는 바이트 시퀀스를 부호없는 64 비트 정수의 균일 한 분포에 매핑해야하는 해시 테이블 또는 기타 데이터 구조를 구현하는 데 사용됩니다.

해시 함수는 충돌에 강하지만 암호화적으로 안전하지는 않습니다.

주어진 byte sequence의 해시 값은 단일 프로세스 내에서 일관성이 있지만, 프로세스마다 다릅니다.

Library 사소한 변경사항 (Minor changes to the library)

항상 그렇듯이 호환성에 대한 Go 1 약속을 염두에두고 라이브러리에 대한 다양한 사소한 변경 및 업데이트가 있습니다.

crypto/tls

SSL 버전 3.0 (SSLv3)에 대한 지원이 제거되었습니다. SSLv3은 TLS보다 먼저 암호화 된 프로토콜입니다.

GOLSBUG 환경 변수를 통해 TLS 1.3을 더 이상 비활성화 할 수 없습니다. Config.MaxVersion 필드를 사용하여 TLS 버전을 구성하십시오.

Config.Certificates 필드를 통해 여러 인증서 체인이 제공되면 이제 피어와 호환되는 첫 번째 인증서 체인이 자동으로 선택됩니다. 이를 통해 예를 들어 ECDSA 및 RSA 인증서를 제공하고 패키지가 자동으로 최상의 인증서를 선택할 수 있습니다. Certificate.Leaf 필드를 설정하지 않으면 이 선택의 성능이 저하됩니다.

새로운 CipherSuitesInsecureCipherSuites 함수는 현재 구현 된 암호 스위트 목록을 리턴합니다. 새로운 CipherSuiteName 함수는 암호 스위트 ID의 이름을 리턴합니다.

새로운 (* ClientHelloInfo) .SupportsCertificate(* CertificateRequestInfo) .SupportsCertificate 메소드는 피어가 특정 인증서를 지원하는지 여부를 표시합니다.

tls 패키지는 더 이상 레거시 NPN (Next Protocol Negotiation) 확장을 지원하지 않으며 이제 ALPN 만 지원합니다. 이전 릴리스에서는 두 가지를 모두 지원했습니다. API 변경 사항이 없으며 응용 프로그램이 이전과 동일하게 작동해야합니다. 대부분의 다른 클라이언트와 서버는 표준화 된 ALPN을 위해 NPN 지원을 이미 제거했습니다.

RSA-PSS 서명은 이제 TLS 1.2 핸드 셰이크에서 지원 될 때 사용됩니다. 이는 대부분의 응용 프로그램에는 영향을 미치지 않지만 RSA-PSS 서명을 지원하지 않는 사용자 지정 Certificate.PrivateKey 구현은 새 Certificate.SupportedSignatureAlgorithms 필드를 사용하여 비활성화해야합니다.

Config.GetConfigForClient가 설정된 경우 Config.CertificatesConfig.GetCertificate는 모두 nil 일 수 있습니다. 콜백이 인증서 나 오류를 반환하지 않으면 unrecognized_name이 전송됩니다.

새로운 CertificateRequestInfo.Version 필드는 클라이언트 인증서 콜백에 TLS 버전을 제공합니다.

새로운 TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305_SHA256 상수는 이전에 TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305TLS_ECDLY_305와 같이 암호화 그룹의 최종 이름을 사용합니다.

crypto/x509

Certificate.CreateCRL은 이제 Ed25519 발급자를 지원합니다.

debug/dwarf

debug/dwarf 패키지는 이제 DWARF 버전 5 읽기를 지원합니다.

새로운 메소드 (* Data) .AddSection은 입력 파일에서 DWARF 데이터로 임의의 새로운 DWARF 섹션 추가를 지원합니다.

새 메소드 (* Reader) .ByteOrder는 현재 컴파일 단위의 바이트 순서를 리턴합니다. 위치 설명과 같은 기본 순서로 인코딩 된 속성을 해석하는 데 사용될 수 있습니다.

새로운 메소드 (* LineReader) .Files는 라인 리더에서 파일 이름 테이블을 리턴합니다. 이것은 AttrDeclFile과 같은 DWARF 속성의 값을 해석하는 데 사용될 수 있습니다.

encoding/asn1

비 정렬 화는 이제 새로운 TagBMPString 상수로 표시되는 ASN.1 문자열 유형 BMPString을 지원합니다.

encoding/json

Decoder type은 현재 디코더 위치의 입력 스트림 바이트 오프셋을 반환하는 새로운 메소드 InputOffset을 지원합니다.

Compact는 더 이상 문서화 된 기능이 아닌 U + 2028 및 U + 2029 문자를 이스케이프하지 않습니다. 올바른 이스케이프에 대해서는 HTMLEscape를 참조하십시오.

문서화 된 동작을 더 밀접하게 따르기 위해 숫자는 더 이상 잘못된 숫자를 허용하지 않습니다. 프로그램이 빈 문자열과 같은 유효하지 않은 숫자를 허용해야하는 경우 유형을 비 정렬 화자로 랩핑하십시오.

go/build

컨텍스트 유형에는 빌드에 대한 작업 디렉토리를 설정하는 데 사용할 수있는 새 필드 Dir이 있습니다. 기본값은 실행중인 프로세스의 현재 디렉토리입니다. 모듈 모드에서는 메인 모듈을 찾는 데 사용됩니다.

go/doc

새로운 기능 NewFromFiles는 * ast.File 목록에서 패키지 문서를 계산하고 예제를 적절한 패키지 요소와 연관시킵니다. 새로운 정보는 패키지, 유형 및 기능 유형의 새 예제 필드와 예제 유형의 새 접미사 필드에서 사용할 수 있습니다.

io/ioutil

TempDir는 이제 이름에 예측 가능한 접두사와 접미사가있는 디렉토리를 만들 수 있습니다. TempFile과 마찬가지로 패턴에 '*'가 포함되어 있으면 임의의 문자열이 마지막 '*'을 대체합니다.

log

새로운 Lmsgprefix 플래그는 행 시작 부분이 아니라 로그 메시지 직전에 선택적 출력 접 두부를 출력하도록 로깅 기능에 지시하는 데 사용될 수 있습니다.

math

새로운 FMA 함수는 x * y 계산의 중간 반올림없이 부동 소수점에서 x * y + z를 계산합니다. 여러 아키텍처가 추가적인 성능을 위해 전용 하드웨어 명령어를 사용하여이 계산을 구현합니다.

math/big

GCD 방법은 이제 입력 a와 b가 0 또는 음수가되도록합니다.

math/bits

새로운 기능인 Rem, Rem32 및 Rem64는 몫이 넘칠 때도 나머지 계산을 지원합니다.

mime

.js.mjs 파일의 기본 유형은 이제 application/javascript가 아닌 text/javascript입니다. 이것은 응용 프로그램 / 자바 스크립트를 더 이상 사용하지 않는 것으로 취급하는 IETF 초안에 따릅니다.

mime/multipart

새로운 Reader 메서드 NextRawPart는 인용 인쇄 가능한 데이터를 투명하게 디코딩하지 않고 다음 MIME 부분을 가져올 수 있도록 지원합니다.

net/http

새로운 헤더 메소드 값을 사용하여 표준화 된 키와 연관된 모든 값을 페치 할 수 있습니다.

새 전송 필드 DialTLSContext를 사용하여 프록시되지 않은 HTTPS 요청에 대한 TLS 연결을 작성하기위한 선택적 다이얼 기능을 지정할 수 있습니다. 이 새로운 필드는 DialTLS 대신 사용할 수 있으며 이제는 더 이상 사용되지 않습니다. DialTLS는 계속 작동하지만 새 코드는 DialTLSContext를 사용해야하므로 더 이상 필요하지 않은 전송으로 다이얼을 취소 할 수 있습니다.

Windows에서 ServeFile은 이제 2GB보다 큰 파일을 올바르게 제공합니다.

net/http/httptest

새로운 서버 필드 EnableHTTP2는 테스트 서버에서 HTTP/2 enabling를 지원합니다.

nett/textproto

새로운 MIMEHeader 메서드 Values를 사용하여 표준화 된 키와 관련된 모든 값을 가져올 수 있습니다.

os/signal

Windows에서 CTRL_CLOSE_EVENT, CTRL_LOGOFF_EVENT 및 CTRL_SHUTDOWN_EVENT 이벤트는 이제 Control-C 및 Control-Break이 syscall.SIGINT 신호를 생성하는 방법과 유사하게 syscall.SIGTERM 신호를 생성합니다.

plugin

플러그인 패키지는 이제 freebsd/amd64를 지원합니다.

reflect

StructOf는 이제 StructField 요소에서 PkgPath 필드를 설정하여 내 보내지 않은 필드로 구조체 유형 작성을 지원합니다.

runtime

runtime.Goexit는 더 이상 재귀적 panic/recover을 통해 중단 할 수 없습니다.

macOS에서 SIGPIPE는 Go Runtime이 초기화되기 전에 설치된 신호 처리기로 더 이상 전달되지 않습니다. macOS는 스레드가 닫힌 파이프에 쓰지 않고 SIGPIPE를 기본 스레드에 전달하기 때문에 필요합니다.

runtime//pprof

생성 된 프로파일에는 더 이상 인라인 마크에 사용되는 의사 PC가 포함되지 않습니다. 인라인 함수의 심볼 정보는 pprof 도구가 예상하는 형식으로 인코딩됩니다. 최근 릴리스에서 소개 된 회귀에 대한 수정 사항입니다.

strconv

NumError 유형에는 변환에 실패한 이유를 검색하는 데 사용할 수있는 Unwrap 메소드가 있습니다. 이것은 오류가있는 NumError 값 사용을 지원합니다. 기본 오류가 strconv.ErrRange 또는 strconv.ErrSyntax인지 확인합니다.

sync

경쟁이 치열한 Mutex를 잠금 해제하면 CPU가 해당 Mutex를 기다리는 다음 Go Routune으로 직접 전달됩니다. 이는 많은 CPU 수의 머신에서 고도로 경쟁적인 Mutex의 성능을 크게 향상시킵니다.

Testing

테스트 패키지는 이제 T.Cleanup 또는 B.Cleanup을 각각 호출하여 테스트 또는 벤치 마크가 완료된 후 호출되는 정리 기능을 지원합니다.

text/template

text/template는 괄호로 묶은 인수를 함수로 사용할 때 오류를 올바르게보고합니다. 이것은 {{if (eq .F "a") 또는 (eq .F "b")}}와 같은 잘못된 경우에 가장 일반적으로 나타납니다. {{if 또는 (eq .F "a") (eq .F "b")}}로 작성해야합니다. 잘못된 사례는 예상대로 작동하지 않았으며 이제는 오류로보고되어 기능하지 않음을 주장 할 수 없습니다.

unicode

시스템 전체에서 유니 코드 패키지 및 관련 지원이 유니 코드 11.0에서 유니 코드 12.0으로 업그레이드되어 4 개의 새로운 스크립트와 61 개의 새로운 이모티콘을 포함한 554 개의 새로운 문자가 추가되었습니다.

반응형
.JSON 설정파일 읽어오기

.JSON 설정파일 읽어오기

github에 코드를 작성하는데 db의 중요한 설정값을 공개할 수는 없기 때문에 설정파일만 따로 보관해야 한다. 자금이 있어서 private github 서비스를 사용할 수도 없는 입장이고, 개인 개발자의 한계.

GO RESTFUL 서브를 만드려고 하는데 설정 파일을 json으로 저장하고, 이를 필요할 때 불러오는 코드를 작성하려고 한다.

go-mssqldb 패키지를 사용해서 microsoft sql server에 접속을 해서 이를 쏴주는 기능을 사용하려고 한다.

우선 저는 아래와 같은 구조를 갖는 setting.json 을 만드려고 합니다.

setting.json

{
    "database": "sqlserver",
    "user":{
        "id":"admin",
        "pwd":"123456789a!"
    },
    "host":{
        "address": "222.111.111.111",
        "port": 1433
    }
}

이제 이를 golang 에 맞는 type struct를 만듭니다.

type config struct

type MssqlConnect struct {
	Database string `json:"database"`
	User struct {
		ID  string `json:"id"`
		Pwd string `json:"pwd"`
	} `json:"user"`
	Host struct {
		Address string `json:"address"`
		Port    int    `json:"port"`
	} `json:"host"`
}

Load Config

다음은 config.json 파일을 읽어오는 과정입니다.

func LoadConfig() (string, error){
	var config MssqlConfig
	file, err := os.Open("setting.json")
	defer file.Close()
	if err != nil {
		Log.Fatal(err)
	}
	decoder := json.NewDecoder(file)
	err = decoder.Decode(&config)
	if err != nil {
		Log.Fatal(err)
	}
	return config, err
}

func main

아래와 같이 사용하면 됩니다.

func main() {
  config, err := LoadConfig()
  fmt.Println(config.Database) // sqlserver
  fmt.Println(config.User.ID) // admin
}
반응형

'개발 > Golang' 카테고리의 다른 글

Go 1.14 릴리즈  (0) 2020.02.26
GO | golang 1.9 update  (0) 2017.09.06
Golang | 최신버전으로 업그레이드 할 때 주의점  (0) 2016.08.23
golang | strings 패키지  (0) 2016.08.12
[Golang] mysql, mariadb 원격접속 허용하기  (0) 2016.07.29

Golang 에 유용한 IDE 에디터

Go언어를 공부하다보면, 이것저것 편집기를 만져보는게 하나의 통합된 편집기에서 사용하고 싶고, 이것저것 여러 에디터를 설치하기가 싫다.

  • Atom : node.js 로 만들어진 에디터. 범용성이 뛰어납니다. 이본적으로 browser를 기반으로 만들어져 그런지 사양을 좀 탑니다. 처음에 설정을 하기가 좀 힘이 듭니다. 실행중에 잦은 오류가 생깁니다. 이뻐서 사용해보려고 했는데, 뭔가 생산을 하기에는 부적합한 도구가 아닐까 생각이 듭니다.
    저는 이상하게 자동완성 기능이 되다 안되다….. 제가 잘 못쓰는 거겠지만.

  • IntelliJ IDEA : plugin 을 통해서 사용할 수 있습니다. 강좌를 보면 외국분들은 많이 사용하더라구요. 이클립스 같은 통합형툴.

  • LiteIDE : 개인적으로 필요한 기능등만 들어있는 툴입니다. golang에 특화 되어 있어서 사용하기가 편합니다.
    기본에 충실한 에디터 입니다.

  • sublime : Atom과 같이 초반에 설정을 해 줘야 하는게 상당히 번거롭습니다. 가볍고, 빠릅니다.

기타 vim, emacs 등이 있지만, 저는 사용할 줄 아직 모르고, 이 편집기를 사용하신다면 이미 에디터 끝판왕.
메모장을 드려도 잘 사용하실 듯

언젠가, emacs 로 넘어가는 그날을 위해서

반응형

+ Recent posts